using DeviceDataGenerator;
using System;

namespace DeviceDataGenerator
{
    /// <summary>
    /// 横排表格显示演示程序
    /// </summary>
    public class TableDisplayDemo
    {
        public static void RunDemo()
        {
            Console.WriteLine("=== DeviceCommons 横排表格显示演示 ===\n");

            // 创建模拟的测试数据
            var stats = new PerformanceStats();
            var settings = DefaultConfig.GetDefault();

            Console.WriteLine("正在生成模拟测试数据...");
            GenerateMockData(stats);

            Console.WriteLine("展示新的横排表格显示效果:\n");
            
            // 模拟 DisplayCurrentStats 的表格显示部分
            Console.WriteLine("=== DeviceCommons 性能测试实时统计 ===");
            Console.WriteLine($"运行时间: {stats.GetRunningTime()} | 总测试: {stats.TotalTests:N0} | 成功率: {stats.SuccessRate:P2}\n");

            // 系统资源统计 - 横排表格
            Console.WriteLine("💾 系统资源统计:");
            Console.WriteLine("┌──────────┬────────────┬────────────┬────────────┬────────────┐");
            Console.WriteLine("│ 资源类型  │   平均值    │   移动平均   │   最小值    │   最大值    │");
            Console.WriteLine("├──────────┼────────────┼────────────┼────────────┼────────────┤");
            Console.WriteLine($"│ CPU使用率 │ {stats.AverageCpuUsage,9:F1}%  │ {stats.MovingAverageCpuUsage,9:F1}%  │ {stats.MinCpuUsage,9:F1}%  │ {stats.MaxCpuUsage,9:F1}%  │");
            Console.WriteLine($"│ 内存使用  │{stats.AverageMemoryUsageMB,9:F1} MB │{stats.MovingAverageMemoryUsageMB,9:F1} MB │{stats.MinMemoryUsageMB,9:F1} MB │{stats.MaxMemoryUsageMB,9:F1} MB │");
            Console.WriteLine("└──────────┴────────────┴────────────┴────────────┴────────────┘\n");

            // 性能统计 - 横排表格
            Console.WriteLine("📊 性能统计:");
            Console.WriteLine("┌──────────┬────────────┬────────────┬────────────┬────────────┐");
            Console.WriteLine("│ 操作类型  │   平均值    │   移动平均   │   最小值    │   最大值    │");
            Console.WriteLine("├──────────┼────────────┼────────────┼────────────┼────────────┤");
            Console.WriteLine($"│ 构建时间  │ {stats.AverageBuildTime,8:F3} ms │ {stats.MovingAverageBuildTime,8:F3} ms │ {stats.MinBuildTime,8:F3} ms │ {stats.MaxBuildTime,8:F3} ms │");
            Console.WriteLine($"│序列化时间 │ {stats.AverageSerializeTime,8:F3} ms │ {stats.MovingAverageSerializeTime,8:F3} ms │ {stats.MinSerializeTime,8:F3} ms │ {stats.MaxSerializeTime,8:F3} ms │");
            Console.WriteLine($"│ 解析时间  │ {stats.AverageParseTime,8:F3} ms │ {stats.MovingAverageParseTime,8:F3} ms │ {stats.MinParseTime,8:F3} ms │ {stats.MaxParseTime,8:F3} ms │");
            Console.WriteLine("└──────────┴────────────┴────────────┴────────────┴────────────┘\n");

            // 分段统计表格
            var segmentStats = stats.GetParseTimeSegmentStats().ToList();
            if (segmentStats.Any())
            {
                Console.WriteLine("📊 数据大小分段解析统计:");
                Console.WriteLine("┌────────────────┬────────┬──────────┬──────────┬──────────┬─────────┐");
                Console.WriteLine("│    分段类型     │测试次数│ 平均时间  │ 移动平均  │  吞吐量   │平均大小 │");
                Console.WriteLine("├────────────────┼────────┼──────────┼──────────┼──────────┼─────────┤");
                
                foreach (var segment in segmentStats.Take(3)) // 只显示前3个避免输出过长
                {
                    Console.WriteLine($"│{segment.SegmentName,-16}│{segment.Count,6:N0}  │{segment.AverageParseTime,8:F3}ms│{segment.MovingAverageParseTime,8:F3}ms│{segment.ThroughputKBps,8:F1}KB/s│{segment.AverageDataSize,7:F0}字节│");
                }
                Console.WriteLine("└────────────────┴────────┴──────────┴──────────┴──────────┴─────────┘");
            }

            Console.WriteLine("\n✨ 新的横排表格显示特点:");
            Console.WriteLine("  ✅ 更紧凑的布局，节省垂直空间");
            Console.WriteLine("  ✅ 清晰的表格边框，数据对齐美观");
            Console.WriteLine("  ✅ 一目了然的数据对比");
            Console.WriteLine("  ✅ 分类明确的统计信息");
            Console.WriteLine("  ✅ 保持完整的加密压缩细分对比功能");

            Console.WriteLine("\n🎯 使用方法:");
            Console.WriteLine("  运行 'dotnet run' 启动实际性能测试，即可看到新的表格显示效果");

            Console.WriteLine("\n演示完成！");
        }

        /// <summary>
        /// 生成模拟测试数据
        /// </summary>
        private static void GenerateMockData(PerformanceStats stats)
        {
            var random = new Random();
            
            // 生成一些测试数据来演示表格效果
            for (int i = 0; i < 100; i++)
            {
                var messageSize = random.Next(100, 10000);
                var useEncryption = random.NextDouble() < 0.5;
                var useCompression = random.NextDouble() < 0.3;

                var result = new TestResult
                {
                    Config = new TestConfig 
                    { 
                        DeviceName = $"DemoDevice{i}",
                        UseEncryption = useEncryption,
                        UseCompression = useCompression
                    },
                    BuildTime = (long)(random.NextDouble() * 500000),
                    SerializeTime = (long)(random.NextDouble() * 1000000),
                    ParseTime = (long)(random.NextDouble() * 2000000),
                    MessageSize = messageSize,
                    Success = true,
                    CpuUsagePercent = random.NextDouble() * 50 + 20,
                    MemoryUsageBytes = random.NextInt64(100 * 1024 * 1024, 200 * 1024 * 1024),
                    Timestamp = DateTime.Now
                };

                stats.AddResult(result);
            }
        }
    }
}